package com.charging.business.qin;

import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

/**
 * @author JerryLu
 * @date 2024/11/8 15:58
 * @description 陕西车辆特情在线计费请求实体
 */
@Data
public class QinOnLineRequest {
    /** 请求ID */
    @JSONField(ordinal = 0)
    public String requestId;

    /** 计费明细请求ID */
    @JSONField(ordinal = 1)
    public String splitProvince;

    /**
     * 请求类型
     * 10. 入口信息与特情联合请求
     * 11. 出口车道跨省特情在线计费（含本省单省和跨省）
     * 12. 出口车道入口站查询（入口信息请求）
     */
    @JSONField(ordinal = 2)
    public Integer requestType;

    /**
     * 是否多省交易
     * 0：单省
     * 1：多省
     * 9：未知
     * 对于非CPC卡或特情发生时，可能出现未知；
     * 对于CPC卡正常计费时，通过读取CPC卡内是否有外省累计金额信息和入口收费站是否为本省收费站来判断是否跨省，是否需要向部中心请求
     */
    @JSONField(ordinal = 3)
    public Integer multiProvince;

    /**
     * 通行标识 ID
     * 当介质类型为OBU和CPC卡时必填
     */
    @JSONField(ordinal = 4)
    public String passId;

    /**
     * CPC卡内读取的省内通行收费门架数量
     * 请求类型为10、11，且为本省单省通行时，必填；
     */
    @JSONField(ordinal = 5)
    public Integer gantryCount;

    /**
     * CPC卡内读取的省内交易金额累计
     * 请求类型为10、11，且为本省单省通行时，必填；
     */
    @JSONField(ordinal = 6)
    public Integer gantryProvFee;

    /**
     * CPC卡内读取的省内通行收费门架HEX编号组合
     * 请求类型为10、11，且为本省单省通行时，必填；
     */
    @JSONField(ordinal = 7)
    public String gantryHexGroup;

    /**
     * 出口通行介质类型
     * 必填：是
     * 1-OBU
     * 2-CPC 卡
     * 3-纸券
     * 9-无通行介质
     */
    @JSONField(ordinal = 8)
    public Integer mediaType;

    /**
     * 通行介质编码
     * CPC卡16位；
     * 无介质通行为030；
     * 纸券，为01+纸券标识(不超过20位)；
     * ETC卡号 20位（通行介质为OBU时，填写ETC卡号）；
     */
    @JSONField(ordinal = 9)
    public String mediaNo;

    /**
     * 发行服务机构Id
     */
    @JSONField(ordinal = 10)
    public String issuerId;

    /**
     * 是否折扣
     * 必填：是
     * 请求类型为10、11时，必填；
     * 1-折扣
     * 2-不折扣
     */
    @JSONField(ordinal = 11)
    public Integer isDiscount;

    /**
     * 是否验证最小费额
     * 请求类型为10、11时，可填,默认为1
     * 1- 验证
     * 2- 不验证
     */
    @JSONField(ordinal = 12)
    public Integer validShortFee;

    /**
     * 入口车道编号
     * 请求类型为11时必填
     */
    @JSONField(ordinal = 13)
    public String enLaneId;

    /**
     * 入口时间
     * 格式：yyyy-MM-ddTHH:mm:ss
     * 请求类型为11时必填
     */
    @JSONField(ordinal = 14)
    @JsonFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
    public String enTime;

    /**
     * 入口时间范围开始
     * 请求类型为10、12时，可填；
     * 与enTime字段互斥。有确定入口时间时，填enTime；无确定入口时间时，可填入口时间范围；
     */
    @JSONField(ordinal = 15)
    @JsonFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
    public String enStartTime;

    /**
     * 入口时间范围结束
     * 请求类型为10、12时，可填；
     * 与enTime字段互斥。有确定入口时间时，填enTime；无确定入口时间时，可填入口时间范围；
     */
    @JSONField(ordinal = 16)
    @JsonFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
    public String enEndTime;

    /**
     * 出口实际车牌号码
     */
    @JSONField(ordinal = 17)
    public String vehicleId;

    /**
     * 21位出口车道编号
     */
    @JSONField(ordinal = 18)
    public String exLaneId = "";

    /**
     * 出口时间
     */
    @JSONField(ordinal = 19)
    @JsonFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
    public String exTime;

    /**
     * 出口收费车型
     * 必填：是
     */
    @JSONField(ordinal = 20)
    public Integer vehicleType;

    /**
     * 车辆用户类型
     * CPU卡 0015 文件或双片式标签 EF04 文件或单片式标签 EF01文件
     * 必填：否，默认为0
     * 0-普通车
     * 6-公务车
     * 8-军警车
     * 10-紧急车
     * 12-免费
     * 14-车队
     * 24-Jl集装箱
     * 26-应急车
     * 27-货车列车或半挂汽车列车
     * 28-J2 集装箱
     */
    @JSONField(ordinal = 21)
    public Integer vehicleUserType;

    /**
     * 车种
     * 必填：否，默认为0
     * 0-普通
     * 8-军警
     * 10-紧急
     * 14-车队（35号公告已定义）
     * 21-绿通
     * 22-联合收割
     * 23-抢险救灾
     * 24-Jl集装箱
     * 25-大件运输；
     * 26-应急车
     * 27-货车列车或半挂汽车列车
     * 28- J2 集装箱
     */
    @JSONField(ordinal = 22)
    public Integer vehicleClass;

    /**
     * 车轴数
     * 请求类型为10、11时，可填；
     */
    @JSONField(ordinal = 23)
    public Integer axleCount;

    /**
     * ETC卡 DF01下0002 内容
     * 请求类型为10、11，且ETC卡支付时，宜填；
     */
    @JSONField(ordinal = 24)
    public String ETCCARD0002;

    /**
     * ETC 卡 DF01 下0015 内容
     * 请求类型为10、11，且ETC卡支付时，宜填；
     */
    @JSONField(ordinal = 25)
    public String ETCCARD0015;

    /**
     * ETC卡DF01下0019 内容
     * 请求类型为10、11，且ETC卡支付时，宜填；
     */
    @JSONField(ordinal = 26)
    public String ETCCARD0019;

    /**
     * CPC卡 MF下EF01内容
     * 请求类型为10、11，且ETC卡支付时，宜填；
     */
    @JSONField(ordinal = 27)
    public String CPCMFEF01;

    /**
     * CPC卡 MF下EF02内容
     * 请求类型为10、11，且ETC卡支付时，宜填；
     */
    @JSONField(ordinal = 28)
    public String CPCMFEF02;

    /**
     * CPC卡 DF01下EF01内容
     * 请求类型为10、11，且ETC卡支付时，宜填；
     */
    @JSONField(ordinal = 29)
    public String CPCEF01;

    /**
     * CPC卡 DF01下EF02内容
     * 请求类型为10、11，且ETC卡支付时，宜填；
     */
    @JSONField(ordinal = 30)
    public String CPCEF02;

    /**
     * CPC卡 DF01下EF04内容
     * 请求类型为10、11，且ETC卡支付时，宜填；
     */
    @JSONField(ordinal = 31)
    public String CPCEF04;
}
